package org.example.sword2offer.primary;

/**
 * @author: lynn
 * @Descript: NC33
 * @date: 2021/7/2 15:55
 * @version: 1.0
 */
public class Q81_MergeTwoList {
    public static void main(String[] args) {
        ListNode listNode1=new ListNode(1);
        listNode1.next=new ListNode(3);
        listNode1.next.next=new ListNode(5);
        ListNode listNode2=new ListNode(2);
        listNode2.next=new ListNode(4);
        Q81_MergeTwoList mergeTwoList=new Q81_MergeTwoList();
        ListNode mergeList=mergeTwoList.mergList(listNode1,listNode2);
        System.out.println("xxxxx");
    }

    public ListNode mergList(ListNode listNode1,ListNode listNode2){
        if (listNode1==null && listNode2!=null) return listNode2;
        if (listNode1!=null && listNode2==null) return listNode1;
        if (listNode1==null && listNode2==null) return null;

        ListNode head=listNode1.val<listNode2.val?listNode1:listNode2;
        listNode1=head==listNode1?listNode1.next:listNode1;
        listNode2=head==listNode2?listNode2.next:listNode2;
        ListNode tail=head;
        while (listNode1!=null && listNode2!=null){
                if (listNode1.val<listNode2.val){
                    tail.next=listNode1;
                    listNode1=listNode1.next;
                }else {
                    tail.next=listNode2;
                    listNode2=listNode2.next;
                }
            tail=tail.next;
        }

        while (listNode1!=null){
            tail.next=listNode1;
            listNode1=listNode1.next;
            tail=tail.next;
        }
        while (listNode2!=null){
            tail.next=listNode2;
            listNode2=listNode2.next;
            tail=tail.next;
        }
        return head;
    }
    private static class ListNode{
        ListNode next;
        int val;
        ListNode(int val){
            this.val=val;
        }
    }
}
